package zxs.sino.elite.hub.utils;


import zxs.sino.elite.hub.model.model.UserModel;

/**
 * 用户上下文工具类，提供无状态的用户信息获取方式
 */
public class UserContext {
    // 使用ThreadLocal来保存用户信息，保证线程隔离
    private static final ThreadLocal<UserModel> USER_INFO_THREAD_LOCAL = new ThreadLocal<>();

    /**
     * 将用户信息放入当前线程的上下文中
     */
    public static void setUserInfo(UserModel userInfo) {
        USER_INFO_THREAD_LOCAL.set(userInfo);
    }

    /**
     * 从当前线程的上下文中获取用户信息
     */
    public static UserModel getUserInfo() {
        return USER_INFO_THREAD_LOCAL.get();
    }

    /**
     * 获取当前登录用户的ID（常用）
     */
    public static Long getUserId() {
        UserModel userInfo = getUserInfo();
        if (userInfo == null) {
            throw new RuntimeException("用户未登录");
        }
        return userInfo.getUserId();
    }

    /**
     * 获取当前登录用户的用户名（常用）
     */
    public static String getAuthKey() {
        UserModel userInfo = getUserInfo();
        if (userInfo == null) {
            throw new RuntimeException("用户未登录");
        }
        return userInfo.getAuthKey();
    }

    /**
     * 清理当前线程的上下文信息 (非常重要！防止内存泄漏)
     */
    public static void clear() {
        USER_INFO_THREAD_LOCAL.remove();
    }
}